import type { Router } from 'vue-router'
import { message } from 'ant-design-vue'
import { getLocalCache} from '@/utils/LocalStorageUtils'

/**
 * 加载页面辅助函数
 * 用于在异步操作前显示加载页面，操作完成后跳转到目标页面
 */
export const useLoadingPage = (router: Router) => {
  /**
   * 在加载页面执行异步操作
   * @param asyncOperation - 需要执行的异步操作函数
   * @param targetRoute - 操作完成后跳转的目标路由
   * @param errorRoute - 出错时跳转的路由，默认为首页
   * @param type 面试类型（笔试，技术面，HR面，全流程面试）
   * @param isFull 是否为全流程面试
   */
  const withLoading = async (
    asyncOperation: () => Promise<any>,
    targetRoute: string,
    errorRoute: string = '/',
    type: string,
    isFull: boolean
  ) => {
    // 先跳转到加载页面
    router.push('/loading');

    //判断是否是全流程面试
    let fullInterviewId = null
    if (isFull){
      fullInterviewId = getLocalCache("fullInterviewId")
    }
    try {
      if(type === 'exam'){
        // 执行异步操作
        const data = await asyncOperation();
        if(data.code !== 0) return message.error("生成笔试出现错误：" + data.msg);
        // 操作完成后跳转到目标页面
        if(isFull){
          router.replace(targetRoute + `/${data.data}?redirect=/api/full/interview?fullInterviewId=${fullInterviewId}`);
        }else {
          router.replace(targetRoute + `/${data.data}`);
        }
      }else if (type === 'tec'){
        console.log("tec")
        // 执行异步操作
        const data = await asyncOperation();
        if(data.code !== 0) return message.error("生成技术面试出现错误：" + data.msg);
        // 操作完成后跳转到目标页面
        if(isFull){
          router.replace(targetRoute+`?tecInterviewId=${data.data}&redirect=/api/full/interview?fullInterviewId=${fullInterviewId}`);
        }else {
          router.replace(targetRoute+`?tecInterviewId=${data.data}`);
        }
      }else if(type === 'hr'){
        // 执行异步操作
        const data = await asyncOperation();
        if(data.code !== 0) return message.error("生成HR面试出现错误：" + data.msg);
        // 操作完成后跳转到目标页面
        if(isFull){
          router.replace(targetRoute+`?hrInterviewId=${data.data}&redirect=/api/full/interview?fullInterviewId=${fullInterviewId}`);
        }else {
          router.replace(targetRoute+`?hrInterviewId=${data.data}`);
        }
      }else {
        //全流程面试
        const data = await asyncOperation();
        if(data.code !== 0) return message.error("全流程面试出现错误：" + data.msg);
        router.replace(targetRoute+`?fullInterviewId=${data.data}`)
      }
    } catch (error) {
      console.error('Loading operation failed:', error);
      // 出错时跳转到指定页面
      router.push(errorRoute);
    }
  };
  return {
    withLoading,
  };
};
